//#include <config.h>
#include <stdio.h>

#include <stdlib.h>
#include <pthread.h>
#include <string.h>

void *thread_function (void *arg);

char message[] = "hello world!";
int
main ()
{
  int res;
  pthread_t a_thread;
  void *thread_result;

  res = pthread_create (&a_thread, NULL, thread_function, (void *) message);

  if (res != 0)
    {
      perror ("thread creation failed!");
      exit (EXIT_FAILURE);

    }
  printf ("waiting for thread to finish...\n");
  res = pthread_join (a_thread, &thread_result);//it will not return until other thread return!
  if (res != 0)
    {
      perror ("thread join failed!");
      exit (EXIT_FAILURE);
    }
  printf ("thread jioned, it returned %s\n", (char *) thread_result);
  printf ("message is now %s\n", message);
  exit (EXIT_SUCCESS);
}

void thread_invoke(void)
{

    printf("thread invoke tid:%ld\n", pthread_self());
}
void *thread_function(void *arg)
{
    printf("thread_function is running.Argument was %s \ntid:%ld\n", (char *)arg, pthread_self());
    sleep(1);
    strcpy(message, "Bye!");
	thread_invoke();
    pthread_exit("Thank you for the cpu time!");
}
